﻿//namespace cs_basic_10
//{
//    // 委托类型的声明
//    delegate void MyDel(int x);
//    internal class Program
//    {
//        //void PrintLow(int value)
//        //{
//        //    Console.WriteLine($"Low: {value}");
//        //}
//        //void PrintHigh(int value)
//        //{
//        //    Console.Write($"High: {value}");
//        //}
//        //static void Main(string[] args)
//        //{
//        //    Program program = new Program();
//        //    MyDel del;
//        //    Random rand = new Random();
//        //    int randomValue = rand.Next(100);

//        //    del = randomValue < 50 ? new MyDel(program.PrintLow) : new MyDel(program.PrintHigh);
//        //    del(randomValue);
//        //}
//        static void Main()
//        {
//            X x = new X();

//            // 声明委托变量
//            MyDel delVar;

//            // 创建委托对象
//            delVar = new MyDel(x.myM1);
//        }
//    }
//    class X
//    {
//        public void myM1(int x)
//        {
//            Console.WriteLine("打印了X类的方法");
//        }
//    }
//}


//namespace cs_basic_10
//{
//    delegate void PrintFunction();
//    class Test
//    {
//        public void Print1()
//        {
//            Console.WriteLine($"调用了实例方法");
//        }
//        public static void Print2()
//        {
//            Console.WriteLine($"调用了静态方法");
//        }
//    }
//    class Program
//    {
//        static void Main()
//        {
//            Test t = new Test();
//            PrintFunction pf = t.Print1;
//            pf += Test.Print2;
//            pf += t.Print1;
//            pf += Test.Print2;

//            if (null != pf)
//                pf();
//            else
//                Console.WriteLine("委托是空的喂");
//        }
//    }
//}

// 预测结果;
//调用了实例方法
//调用了静态方法
//调用了实例方法
//调用了静态方法
//预测正确

//namespace cs_basic_10
//{
//    delegate int MyDel();
//    class MyClass
//    {
//        int IntValue = 5;
//        public int Add2()
//        {
//            IntValue += 2;
//            return IntValue;
//        }
//        public int Add3()
//        {
//            IntValue += 3;
//            return IntValue;
//        }
//    }
//    class Program
//    {
//        static void Main()
//        {
//            MyClass mc = new MyClass();
//            MyDel mDel = mc.Add2;
//            mDel += mc.Add3;
//            mDel += mc.Add2;
//            Console.WriteLine($"Value:{mDel()}");
//        }
//    }
//}

// 预测值是12---------正确

//namespace cs_basic_10
//{
//    delegate void MyDel(ref int x);
//    class Program
//    {
//        void Add2(ref int x)
//        {
//            x += 2;
//        }
//        void Add3(ref int x)
//        {
//            x += 3;
//        }
//        static void Main()
//        {
//            Program pm = new Program();
//            MyDel mDel = pm.Add2;
//            mDel += pm.Add3;
//            mDel += pm.Add2;
//            int x = 5;
//            mDel(ref x);
//            Console.WriteLine(x);
//        }
//    }
//}

//匿名方法
//namespace cs_basic_10
//{
//    class Program
//    {
//        delegate int OtherDel(int InParam);
//        static int Add20(int x)
//        {
//            return x + 20;
//        }
//        static void Main()
//        {
//            OtherDel del = Add20;
//            Console.WriteLine($"{del(5)}");
//            Console.WriteLine($"{del(6)}");
//        }
//    }
//}
//namespace cs_basic_10
//{
//    class Program
//    {
//        delegate int OtherDel(int InParam);
//        static void Main()
//        {
//            OtherDel del = delegate(int x)
//            {
//                return x+20;
//            };
//            Console.WriteLine($"{del(5)}");
//            Console.WriteLine($"{del(6)}");
//        }
//    }
//}

// Lambda表达式
namespace cs_basic_10
{
    delegate Double MyDel(int x);
    class Program
    {
        static void Main(string[] args) 
        { 
            MyDel del = delegate(int x) {  return ++x; };
            MyDel le1 = (int x) => {  return ++x; };
            MyDel le2 = (x) => { return ++x; };
            MyDel le3 = x=> { return ++x; };
            MyDel le4 = x=>  ++x ;

            Console.WriteLine(del(12));
            Console.WriteLine(le1(12));
            Console.WriteLine(le2(12));
            Console.WriteLine(le3(12));
            Console.WriteLine(le4(12));

        }
    }
}